package common.dao;

import java.util.List;

import common.bean.Paging;

/**
 * 通过MyBatis操作数据库的通用DAO接口
 * 
 * @author liuxj
 * @version 1.0.0 2017-07-10
 */
public interface IBaseMyBatisDAO {
    /**
     * 根据SQL语句删除数据
     * 
     * @param sqlId
     *            SQL的ID
     * @return 影响的行数
     */
    int insert(String sqlId);

    /**
     * 根据参数删除数据
     * 
     * @param sqlId
     *            SQL的ID
     * @return 影响的行数
     */
    int insert(String sqlId, Object parameter);

    /**
     * 根据SQL语句修改数据
     * 
     * @param sqlId
     *            SQL的ID
     * @return 影响的行数
     */
    int update(String sqlId);

    /**
     * 根据参数修改数据
     * 
     * @param sqlId
     *            SQL的ID
     * @param parameter
     *            参数
     * @return 影响的行数
     */
    int update(String sqlId, Object parameter);

    /**
     * 根据SQL语句删除数据
     * 
     * @param sqlId
     *            SQL的ID
     * @return 影响的行数
     */
    int delete(String sqlId);

    /**
     * 根据参数删除数据
     * 
     * @param sqlId
     *            SQL的ID
     * @param parameter
     *            参数
     * @return 影响的行数
     */
    int delete(String sqlId, Object parameter);

    /**
     * 根据参询出唯一的一行数据
     * 
     * @param sqlId
     *            SQL的ID
     * @param parameter
     *            参数
     * @return 唯一的一行数据
     */
    <T> T findUnique(String sqlId);

    /**
     * 根据参数查询出唯一的一行数据
     * 
     * @param sqlId
     *            SQL的ID
     * @param parameter
     *            参数
     * @return 唯一的一行数据
     */
    <T> T findUnique(String sqlId, Object parameter);

    /**
     * 根据SQL语句查询数据列表
     * 
     * @param sqlId
     *            SQL的ID
     * @return 数据列表
     */
    <T> List<T> findForList(String sqlId);

    /**
     * 根据参数查询数据列表
     * 
     * @param sqlId
     *            SQL的ID
     * @param parameter
     *            参数
     * @return 数据列表
     */
    <T> List<T> findForList(String sqlId, Object parameter);

    /**
     * 根据分页参数和查询参数查询数据库中的数据列表，基于Mybatis-PageHelper分页插件
     * 
     * @param dataSqlId
     *            查询数据SQL的ID
     * @param paging
     *            分页参数
     * @return 分页数据
     */
    Paging findForPageHelper(String dataSqlId, Paging paging);

}
